//  全局组件注册模块
import type { App, Component, Plugin } from 'vue'
import * as ElementPlusIconsVue from '@element-plus/icons-vue'

// 定义全局组件类型 - 使用动态类型，支持任意数量的组件
type GlobalComponents = Record<string, Component>

// 全局组件对象
const allGlobalComponents: GlobalComponents = {}

// 注册 Element Plus 图标组件
Object.entries(ElementPlusIconsVue).forEach(([key, component]) => {
  allGlobalComponents[key] = component as Component
})

// 递归获取所有组件
const componentModules = import.meta.glob('./**/index.vue', {
  eager: true,
  import: 'default'
})

/**
 * 从模块中提取组件并添加到全局组件对象
 * 递归处理所有嵌套目录中的组件
 */
Object.entries(componentModules).forEach(([path, component]) => {
  const pathParts = path.split('/')
  const componentName = pathParts[pathParts.length - 2] // 获取index.vue的父目录名

  if (componentName && component) {
    allGlobalComponents[componentName] = component as Component
  }
})

// 全局组件注册插件
const GlobalComponentsPlugin: Plugin = {
  install(app: App): void {
    Object.entries(allGlobalComponents).forEach(([key, component]) => {
      app.component(key, component)
    })
  }
}

export default GlobalComponentsPlugin
